package hee;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
         //반드시 암기!!!!!!!
public class J21HelloJDBC {

	public static void main(String[] args) {
		//데이타베이스 접속
		String DRV="oracle.jdbc.driver.OracleDriver"; //드라이버 명
		String URL="jdbc:oracle:thin:@127.0.0.1:1521:xe";//주소 
		String USR="scott"; 
		String PWD="TIGER"; 
		
		//데이타베이스 접속, 조회
		String sql="select * from emp";
		
		//JDBC API 3가지, 인터페이스로 선언되 있음.
		Connection conn=null;
		PreparedStatement pstmt = null;
		//PreparedStatement 이란
		//1. Interface PreparedStatement
		//2. 쿼리문을 먼저 생성하고 값을 나중에 넣어서 실행하는 객체

		ResultSet rs= null;
		
		//정적으로 객체 생성 : sj=new SJVO{
		//DRV(드라이브명) 안에 클래스 지정, 
		try{  //객체 new로 생성했는데 forName로도 가능.
			//1. JDBC 드라이버 로드,forName 메서드로 동적으로 객체 생성
		   Class.forName(DRV);
		   //2.데이터베이스 연결
		   //getConnection 메서드에 접속정보가 있는 URL과 계정정보 및 암호임 USR,PWD를 매개 변수로 넘김.
		  
		   conn = DriverManager.getConnection(URL,USR,PWD);
		   System.out.println("오라클 서버 접속 성공"); //구분하기 위해 사용
		   
		   //3.실행할 SQL 질의문 작성 : SQL 질의문은 String 변수에 작성하고
		   //  preparestatement 메서드를 통해 preparestatement 객체로 생성
		   //  sql에 접속한 (conn)으로 중단
		   pstmt=conn.prepareStatement(sql);
		   //4. SQL 질의문 실행 : executeQuery 메서드로 SQL 질의문을 실행할 수 있음.
		   //5. 실행 결과집합 받기:SQL 질의문 실행 후 결과집합이 SELECT라면 실행후 결과집합이 발생됨
		   //   이것을 받으려면 ResultSet 객체를 이용.
		   rs=pstmt.executeQuery();
		   //rs는 ArrayList의 용도와 비슷, 결과담겨있음.
		   StringBuilder sb=new StringBuilder();
		   //6.결과집합 처리 : next 메서드로 결과존재 여부를 확인하고 getString 메서드로 
		   while(rs.next()){ 
			   //가져올 데이터 조회, 두가지 방법 1. getString 2. (ename)필드이름 으로 출력가능
			   //숫자 , 컬럼명으로 출력가능, 숫자 추천!!! 
			   sb.append(rs.getString(5))
				 .append("/")
				 
				 .append(rs.getString("ename"))
				 .append("/")
				 .append(rs.getString("job"))
				 .append("/")
				 .append(rs.getString("mgr"))
				 .append("/")
				 .append(rs.getString("hiredate"))
				 .append("/")
				 .append(rs.getString("sal"))
				 .append("/")
				 .append(rs.getString("comm"))
				 .append("/")
				 .append(rs.getString("deptno"))
				 
				 .append("\n");	   
		   }
		   System.out.println(sb);
		   
		}catch(ClassNotFoundException cnfe){
			//ClassNotFoundException 실행될때 메시지에 and cnfe 덧붙여줌!!
			System.out.println("JDBC 드라이버를 확인하세요");
		}catch (Exception ex){
            ex.printStackTrace();; 			
		}finally{
			//7. 연결해제 : JDBC 프로그래밍에 사용된 모든객체들은 메모리에서 해제시킴.
			
			if(rs!=null)//반드시 꼭 기입!!
			try{rs.close();}catch(Exception e){} 
			
			if(pstmt !=null)
				try{pstmt.close();}catch(Exception e){} 
			
			if(conn !=null)
				try{conn.close();}catch(Exception e){} 
		} 
		
		
		//정리 : sun에서 제공하는 인터페이스 이용하여 클래스로 선언하여 sql문에 연결하여 데이터를 불러옴 즉, db.
		//다양한 데이터베이스 접속 할 수 있도록 설계된 인터페이스!! : JDBC
	}//main

}//class
